package com.javabasic.algorithm.leetcode;

/**
 * @author mir.xiong
 * @version 1.0
 * @description
 * @see [2864. 最大二进制奇数 - 力扣（LeetCode）](https://leetcode.cn/problems/maximum-odd-binary-number/?envType=daily-question&envId=2024-03-13)
 * @since Created by work on 2024/3/13 21:22
 */
public class MaximumOddBinaryNumber {

    /**
     * 根据题目意思，我们可以知道实际上就是将一个随机的二进制字符串，通过随意改变0和1的位置使其变为最大的一个奇数二进制字符串。
     *
     * 根据二进制的特性，我们知道如果一个二进制数为 奇数 那么其 最低位一定为1，然后又要使其最大由于二进制中只有0和1，我们只要尽量的将1放在高位(j即二进制数的最前面)即可。
     * @param s
     * @return
     */
    public String maximumOddBinaryNumber(String s) {
        int len = s.length();
        int oneNum = 0;
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == '1') {
                oneNum ++;
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < oneNum - 1; i++) {
            result.append("1");
        }
        for (int i = 0; i < len - oneNum; i++) {
            result.append("0");
        }
        result.append("1");
        return result.toString();
    }
}
